package org.toycode.logindemo.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.Stateless;
//import org.apache.solr.client.solrj.response.QueryResponse;
//import org.apache.solr.common.SolrDocument;
//import org.apache.solr.common.SolrDocumentList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.toycode.logindemo.service.SolrServiceRemote;
//import org.toycode.solr.config.Config;
//import org.toycode.solr.config.Entity;
//import org.toycode.solr.config.Prop;
//import org.toycode.solr.entity.AbstractEntity;
//import org.toycode.solr.service.SolrService;

/**
 * This class implements the solr relevant <em>remote</em> services.
 *
 * @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
 * @version 1.0.0.0, Aug 27, 2009
 */
@Stateless
public class SolrServiceBean implements SolrServiceRemote {

    /**
     * logger.
     */
    private Logger logger = LoggerFactory.getLogger(SolrServiceBean.class);
//    private static SolrService solrService;
//
//    static {
//        System.setProperty("solr.solr.home",
//                           "D:/My Documents/NetBeansProjects/LoginDemo/EJBModule/target/classes/solr");
//        solrService = SolrService.getInstance();
//    }
//
//    public void index(final AbstractEntity entity) {
//        solrService.index(entity);
//    }
//
//    public List<String> search(final String query) {
//        List<String> ret = new ArrayList<String>();
//        final QueryResponse rsp = solrService.search(query);
//
//        System.out.println(rsp);
//        final SolrDocumentList solrDocList = rsp.getResults();
//
//        final long foundCnt = solrDocList.getNumFound();
//        logger.debug("found count[" + foundCnt + "]");
//        final Map<String, Map<String, List<String>>> highlighting =
//                rsp.getHighlighting();
//
//        for (int i = 0; i < foundCnt; i++) {
//            final SolrDocument doc = solrDocList.get(i);
//            final Map<String, List<String>> highlights =
//                    highlighting.get(String.valueOf(doc.getFieldValue("id")));
//
//
//            logger.debug("highlights: ");
//            for (final Map.Entry<String, List<String>> hls :
//                 highlights.entrySet()) {
//                for (final String hl : hls.getValue()) {
//                    logger.debug("**** HL ****: \r\n" + hl);
//                    ret.add(hl);
//                }
//            }
//        }
//
//        return ret.isEmpty() ? null : ret;
//    }
//
//    /**
//     * {@inheritDoc}
//     */
//    @Override
//    public List<String> search(final String entity, final String prop,
//                               final String key) {
//        List<String> ret = new ArrayList<String>();
//        String field = prop;
//        if (prop.toLowerCase().contains("word")) { // we need a better way....
//            field = "word_content";
//        }
//        final QueryResponse rsp =
//                solrService.search(entity, field, key, true, 0, 10);
//
//        logger.debug(rsp.toString());
//        final SolrDocumentList solrDocList = rsp.getResults();
//
//        final long foundCnt = solrDocList.getNumFound();
//        logger.debug("found count[" + foundCnt + "]");
//        System.out.println("found count[" + foundCnt + "]");
//        final Map<String, Map<String, List<String>>> highlighting =
//                rsp.getHighlighting();
//
//        for (final SolrDocument doc: solrDocList) {
//            final Map<String, List<String>> highlights =
//                    highlighting.get(String.valueOf(doc.getFieldValue("id")));
//
//
//            logger.debug("highlights: ");
//            for (final Map.Entry<String, List<String>> hls :
//                 highlights.entrySet()) {
//                for (final String hl : hls.getValue()) {
//                    logger.debug("**** HL ****: \r\n" + hl);
//                    System.out.println("**** HL ****: \r\n" + hl);
//                    ret.add(hl);
//                }
//            }
//        }
//
//        return ret.isEmpty() ? null : ret;
//    }
//
//    /**
//     * {@inheritDoc}
//     */
//    @Override
//    public Map<String, String> getEntityMap() {
//        Map<String, String> ret = new HashMap<String, String>();
//        for (final Entity e : Config.solrSvcConfig.entities) {
//            ret.put(e.displayName,
//                    e.clazz.substring(e.clazz.lastIndexOf(".") + 1,
//                                      e.clazz.length()));
//        }
//
//        return ret;
//    }
//
//    /**
//     * {@inheritDoc}
//     */
//    @Override
//    public Map<String, String> getPropsByEntityName(final String entityName) {
//        Map<String, String> ret = new HashMap<String, String>();
//        for (final Entity e : Config.solrSvcConfig.entities) {
//            if (e.displayName.equals(entityName)) {
//                for (final Prop p : e.props) {
//                    ret.put(p.displayName, p.name);
//                }
//
//                return ret;
//            }
//        }
//
//        return null;
//    }
}
